#include <at89c51RC2.h>

sbit OneWire_DQ=P3^7; 

/**
  * @brief 单总线初始化
  * @param 
  * @retval 
  */
unsigned char OneWire_Init(void)
{
	unsigned char i;
	unsigned char AckBit;
	
	OneWire_DQ=1;
	OneWire_DQ=0;
	i = 227;while (--i);  //Delay 500us
	
	OneWire_DQ=1;
	
	i = 29;while (--i);   //Delay 70us
	AckBit=OneWire_DQ;
	i = 227;while (--i);  //Delay 500us
	
	return AckBit;
	
}

/**
  * @brief 发送一位
  * @param Bit 发送的位数据
  * @retval 无
  */
void OneWire_SendBit(unsigned char Bit)
{
	unsigned char i;
	
	OneWire_DQ=0;
	i = 4;while (--i);   //Delay 10us
	OneWire_DQ=Bit;
	i = 22;while (--i);  //Delay 50us
	OneWire_DQ=1;
}

/**
  * @brief 接收一位
  * @param 无
  * @retval Bit 接收的位
  */
unsigned char OneWire_ReciveBit(void)
{
	unsigned char i;
	unsigned char Bit;
	
	OneWire_DQ=0;
	i = 2;while (--i);  //Delay 5us
	OneWire_DQ=1;
	i = 2;while (--i);  //Delay 5us
	Bit=OneWire_DQ;
	i = 22;while (--i);  //Delay 50us
	
	return Bit;
}

/**
  * @brief 发送一个字节
  * @param Byte 要发送的字节
  * @retval 无
  */
void OneWire_SendByte(unsigned char Byte)
{
	unsigned char i;
	
	for(i=0;i<8;i++)
	{
		OneWire_SendBit(Byte&(0x01<<i));
	}
}

/**
  * @brief 接收一个字节
  * @param 无
  * @retval Byte 接收到的字节
  */
unsigned char OneWire_ReceiveByte(void)
{
	unsigned char i;
	unsigned char Byte=0x00;
	
	for(i=0;i<8;i++)
	{
		if(OneWire_ReciveBit()){Byte|=(0x01<<i);}
	}
	
	return Byte;
}